#!/usr/bin/python
#coding:utf-8
'''
文件处理工具，用以扫描文件和输出文件内容
w: 以写方式打开
a: 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+：以读写模式打开
w+：以读写模式打开 (参见 w )
a+：以读写模式打开 (参见 a )
rb: 以二进制读模式打开
wb: 以二进制写模式打开 (参见 w )
ab: 以二进制追加模式打开 (参见 a )
rb+：以二进制读写模式打开 (参见 r+ )
wb+：以二进制读写模式打开 (参见 w+ )
ab+：以二进制读写模式打开 (参见 a+ )fp.read([size])
'''
import os,shutil

def foundFile(sourceDir,fileNameEnd=None,contain=None,noContain=None,childFound=0,listSize=0):
    '''
    获取目录下文件，不包含子目录
    args:
        dir:文件目录
        fileNameEnd:文件名结尾
        contain:文件名包含
        noContain:文件名不包含
        childFound:是否扫描子目录，0 不扫描（默认），1 扫描
        listSize:扫描多大值返回 0 不设置 其他值设置
    
    return：
        list：物理路径文件名列表
    '''

    list=[]
    for top,dirs,nondirs in os.walk(sourceDir):
        if childFound ==0 and top != sourceDir:       #仅处理当前目录
            continue
        
        for item in nondirs:
            if fileNameEnd is not None:
                if not item.endswith(fileNameEnd) : 
                    continue
            if contain is not None:
                if contain not in item:
                    continue
            
            if noContain is not None:
                if noContain in item:
                    continue
            file=top+os.path.sep+item   #得到文件
            list.append(file)
            
            if listSize !=0 and len(list)>=listSize:
                break
    
    return list

def getPath():
    '''
    获取当前文件所在路径
    ''' 
    path=os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + os.path.sep + ".")
    return path

def dataListWriteFile(dataList,file,title="",encode='utf-8',clean=0):
    '''
    写内容到文件
    args：
        dataList:list，内容列表，每行内容逗号分隔
        file：str，输出文件物理路径
        title：str，列名，逗号分隔
        encode：文本编码，默认utf-8
        clean：是否清空文件，默认0 清空，1 不清空
    '''
    if len(dataList)<=0:
        print("Data Length Is Zero")
        return 
    
    if clean==0:
        file_handle = open(file, mode='w',encoding=encode) #清空文件内容
        file_handle.write("")
    
    file_handle = open(file, mode='a',encoding=encode) 
    if title!="":
        file_handle.write(title+'\n')  #添加列名
    if len(dataList)>0:
        for data in dataList:
           file_handle.write(data+'\n') 
        
    file_handle.close()

'''
r 只能读 
r+ 可读可写 不会创建不存在的文件 从顶部开始写 会覆盖之前此位置的内容 
w+ 可读可写 如果文件存在 则覆盖整个文件不存在则创建 
w 只能写 覆盖整个文件 不存在则创建 
a 只能写 从文件底部添加内容 不存在则创建 
a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建
'''
def writeFile(url,data,mode='a'): #
    '''
    数据写入文件
        mode:w 覆盖 a 添加
    '''
    file_handle = open(url, mode=mode, encoding='utf-8')
    if data=="":
        file_handle.write(data)
    else:
        file_handle.write(data+'\n')
    file_handle.close()



def writeOneFile(data,file,add=0,encode='utf-8'):
    '''
    args:
        data:内容
        file:文件名
        add:0 追加，1 覆盖
        encode:编码，默认utf-8
    文件追加一行内容
    '''
    mode='a'
    if add==1:
        mode='w'
    file_handle = open(file, mode=mode,encoding=encode) 
    file_handle.write(data+'\n') 
        
    file_handle.close()

def readFile(file,encoding='utf-8'):
    '''
    文件读取
    '''
    data=[]
    with open(file, 'r',encoding=encoding) as file_to_read:
        while True:
            lines = file_to_read.readline() # 整行读取数据
            if not lines:
                break

            lines=lines.strip()
            if lines=="":
                continue
            data.append(lines.split(",")[1])
    return data

def filter(input):
    '''
    过滤路径下文件
    '''
    result=glob.glob(os.path.join(input, '*.jpg'))
    print(result)

def checkDir(dir):
    '''
    验证目录是否存在，不存在创建
    '''
    if not os.path.exists(dir):
        os.mkdir(dir)

def  getfileName():
    '''
    获取文件名
    '''
    file="./work/data/ecicikit.txt"
    print(os.path.splitext(file))
    # ecicikit.txt
    print("获取文件名",os.path.split(file)[1])
    # ecicikit.txt
    print("获取文件名",os.path.basename(file))

    filename = os.path.basename(file)
    filename, file_extension = os.path.splitext(filename)
    print("无后缀文件名",filename,"后缀",file_extension)


def moveFile(sourceFile,resultFile):
    '''
    移动文件
    args：
        sourceFile：源文件
        resultFile：移动后文件
    '''
    if not os.path.exists(sourceFile):
        print("No Found File",sourceFile)
        return 
    shutil.move(sourceFile,resultFile)


def delDir(path):
    '''
    删除文件夹
    '''
    shutil.rmtree(path)

def moveDir(sourcePath,resultPath):
    '''
    移动文件夹
    '''
    if os.path.exists(resultPath):
        print(resultPath, 'Have exists,First Delete')
        return
        # shutil.rmtree(resultPath) 删除目录
    shutil.copytree(sourcePath, resultPath)

def charReadFile(file):
    '''
    字符方式读取数据
    '''
    fh = open(file, 'rb')  
    one = fh.read(1)   #读取一个字符，两个字节
    print("一个字符的二进制字符串",one)

def charWrite(file):
    ''' 
    字符方式写入
    '''
    write = open(outputFile, 'wb')
    write.write(xdrid)
    write.close()

